# 10.31声明函数
def shi():
    print("石家庄")
shi()

def add():
    a=3
    b=5
    s=a+b
    print(s)
    return a
# # 调用
c=add()
print(c)

# 函数的参数传递
# 第一组 常量
def add(a,b):
    print(b)

add(1,3)
#
# # 第二组 变量
a=1
b=3
add(a,b)
#
# # 第三组 表达式
add(2*3,4*5)

c=3
add(8,c*3)


# 位置参数实例
def score(a,b,c):
    print("张三成绩为:",a)
    print('李四成绩为：',b)
    print('我的成绩为:',c)

score(77,88,99)
#
# # 代码4  组合式
def reg(name,age,sex='女'):
    print('姓名：{} 年龄{} 性别:{} '.format(name,age,sex))


reg('张三',20)
reg('李四',21,'男')


# 11月5日 可变参数
def favf(*fru):
    print('我喜欢的水果有：')
    for i in fru:
        print(i)

favf('苹果')
favf('苹果','梨')
favf('苹果','梨','桃子','橘子','芒果','香蕉','菠萝','西瓜')

# 参数的值大于2，如果声明函数的时候有其他形参，通常会把可变长参数放在最后
def show(a,b,*l):
    print(a)
    print(b)
    print(l)

show(1,2,3,4,5,6,7,9,56)


def re(a,b,c,d):
    return a+b,c*d,a-c

ss =re(1,2,3,4)
print(ss)


# 11月7

# 变量的作用域
# # 局部变量
def fun():
    a=20
    return a
#
# # 全局变量
a=10
print(a)
print(fun())

# # 11月12日
# 递归函数(特性：必须有1.return2.规模比上次减少，3.前一次的输出是下一次的输入)
def f(n):
    if n <=1:
        return 1
    else:
        return n*f(n-1)

num=int(input('请输入一个正整数:'))
s=f(num)
print(num,'的阶乘是:',s)

# 例题1 利用递归计算1~100相加
def sum(n):
    if n == 1:
        return 1
    else:
        return n+sum(n-1)

print('1~100相加的和为',sum(100))


# 计算斐波那契数列 F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n>=2)的第N项
def fibo(n):
    if n <=2:
        return 1
    else:
        return fibo(n-1)+fibo(n-2)

print('斐波那契数列的第{}项为{}'.format(7,fibo(7)))

# 匿名函数
# <函数名>=lambda<参数列表>：<表达式>
# 使用匿名函数实现a+b+c
sum = lambda a,b,c: a+b+c
print(sum(1,2,3))


# 编写labda函数，参数为正方形的边长M,输出正方型的面积。
fum=lambda m: m**2
print(fum(5))